import axios from "axios";
import Element from 'element-ui'
import router from "./router";
//定义全局axios拦截器
// 这里有个问题，那么如果登录失败，我们是需要弹窗显示错误的，比如验证码错误，用户名或密码不正确等。
// 不仅仅是这个登录接口，所有的接口调用都会有这个情况，所以我们想做个拦截器，对返回的结果进行分析，如果是异常就直接弹窗显示错误，这样我们就省得每个接口都写一遍了。
axios.defaults.baseURL = "http://localhost:8081"

const request = axios.create({
    timeout: 5000,
    headers: {
        'Content-Type': 'application/json; charset=utf-8'
    }
})

//前置拦截，其实可以统一为所有需要权限的请求装配上header的token信息
request.interceptors.request.use(config => {
    config.headers['Authorization'] = localStorage.getItem("token")
    return config
})

// 后置拦截中，判断status.code和error.response.status，如果是401未登录没权限的就调到登录页面，其他的就直接弹窗显示错误。
// 然后再main.js中导入axios.js
request.interceptors.response.use(response => {
    let res = response.data
    console.log("response")

    if (res.code === 200) {
        return response
    } else {
        Element.Message.error(res.message ? res.message : '系统异常！')
        return Promise.reject(response.data.message)
    }
},
    error => {
    console.log(error)
    if (error.response.data) {
        error.message = error.response.data.message
    }

    if (error.response.status === 401) {
        router.push("/login").then(() => {})
    }

    Element.Message.error(error.message)

    return Promise.reject(error)
})

export default request
